# coding:utf-8

# import scrapy

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class TencentSpider(CrawlSpider):
    name = "tencent_crawl"

    allowed_domains = ["hr.tencent.com"]

    # starturls做为第一批请求发送出去，返回的响应默认follow=True，所以一定会经过rules的每个Rule处理
    start_urls = ["https://hr.tencent.com/position.php?&start=0"]

    """
    rules 是一个可以存储多个Rule规则的 列表/元组,引擎会迭代 rules 处理每个Rule, 而每个 Rule 规则，都表示一种 网页链接提取方式 和 响应处理方式
    Rule()参数解释:
        LinkExtractor() 作用提取链接. 在发送这些链接的请求(注意:这里并不是LinkExtractor发送请求,应该还是交给引擎去分配,因此extract_links(response)中response是引擎分配请求后的响应)，返回的响应根据 callback 和 follow 决定
            如 Tencent2/Tencent2/spiders/tencent2.py中的提取详情页url
        process_links="方法名" 表示通过LinkExtractor取得链接后先通过process_links来处理再回调, 可选参数
            def 方法名(self, links):
                ## ...
                return links
        callback 表示 这些响应交给指定的 回调函数 解析
        follow 是一个 bool 值:
            follow = False 表示这些响应，不再通过 任何Rule 的 LinkExtractor 提取链接
            follow = True 表示这些响应，会经过 每个Rule的 LinkExtractor 提取链接(此时会通过集合去重)，再次发送这些新链接请求，这些新链接的响应 会根据所属的follow值判断，如果为 True 会继续经过 每个Rule的 LinkExtractor 提取链接，一直递归下去..当所有的能被提取的链接全部发送过，且没有新的请求了，程序结束

    """

    rules = [
        Rule(LinkExtractor(allow=r'start=\d+'), follow=True),

        Rule(LinkExtractor(allow=r'position_detail\.php\?id=\d+'), callback="parse_page")
    ]

    def parse_page(self, response):
        # item = response.meta["item"]
        item = {}

        item['position_zhize'] = response.xpath("//ul[@class='squareli']")[0].xpath("./li/text()").extract()

        item['position_yaoqiu'] = response.xpath("//ul[@class='squareli']")[1].xpath("./li/text()").extract()

        yield item
